#! /usr/bin/env python
#coding=utf-8
"""
实际并行下载网页的原型
1)传入用户的请求关键字和希望检索的站点的信息
2)根据条件1)构造实际请求，传给greenlet进行异步下载
3)当有从2)返回的部分结果时，可以发出信号，看如何处理返回的结果集。
补充：
对于一具用户的一次请求，可以在1)的时候传入一个策略对象，来控制到底
应该采用什么样的机制来控制怎么样返回结果，怎么样
"""
import eventlet
from eventlet.green import urllib2  

def parallel_download(keyword,urls=None):
    """
    这个函数目前只针对dangdang,未来应是全局性的
    后续还是改成一个站一个函数吧,
    """
    if urls is None:
        raise ValueError("urls不能为None")
    if type(urls)<>tuple:
        raise TypeError("urls类型应为tuple")
    if len(urls)==0:
        raise ValueError("urls内的元素个数应大于0个")
    print "haha"
    _keyword=urllib2.quote(keyword)
    print "___________"
    _url=urls[0]%_keyword
    print _url
    return keyword,"dangdang",urllib2.urlopen(_url).read()
    
    
if __name__=='__main__':
#   TODO常量从单独的文件导入
    dangdang=r"http://search.dangdang.com/book/search_pub.php?key=%B6%C5%C0%AD%C0%AD&catalog=01&SearchFromTop=1"
    dangdang=r"http://search.dangdang.com/book/search_pub.php?key=%s&catalog=01&SearchFromTop=1"
    keyword=u"杜拉拉".encode("gbk",'ignore')
    urls=(dangdang,)
#    parallel_download(keywords,urls)
    print "aa"
    pool = eventlet.GreenPool(1)
    print "bb"
    for keyword,site,html in pool.imap(parallel_download, (keyword,),(urls,)):
        print keyword
        print site
        import ericklib
        ericklib.save2file(html,"html.txt")
        print html.decode("gb18030").encode("utf8")
